// 导入数据库操作模块
const db = require("../db/index");

// 获取文章分类列表
exports.getArticleCates = (req, res) => {
  // 定义SQL语句
  // 根据分类的状态，获取所有未被删除的分类列表数据
  // is_delete 为 0 表示没有被 标记为删除 的数据
  // desc根据id倒叙排序 就是发表文章就会跑到最前面
  const sqlStr = `select * from ev_article_cate where is_delete = 0 order by id desc `;
  // 调用 db.query() 执行 SQL 语句：
  db.query(sqlStr, (err, results) => {
    if (err) return res.cc(err); //执行 SQL 语句失败
    res.send({ status: 0, message: "获取文章分类列表成功", data: results }); //执行 SQL 语句成功
  });
};

// ----------------------------------

//  新增文章分类
exports.addArticleCates = (req, res) => {
  // 验证表单数据   创建 /schema/artcate.js 文章分类数据验证模块，并定义验证规则
  // 查询 分类名称 与 分类别名 是否被占用
  // 定义查询 分类名称 与 分类别名 是否被占用的 SQL 语句
  const sqlStr = `select * from ev_article_cate where name = ? or alias = ? `;
  db.query(sqlStr, [req.body.name, req.body.alias], (err, results) => {
    if (err) return res.cc(err);

    if (results.length === 2)
      return res.cc("分类名称与别名被占用，请更换后重试！"); // 分类名称 和 分类别名 都被占用
    if (
      results.length === 1 &&
      results[0].name === req.body.name &&
      results[0].alias === req.body.alias
    )
      return res.cc("分类名称与别名被占用，请更换后重试！"); // 分类名称 和 分类别名 都被占用
    if (results.length === 1 && results[0].name === req.body.name)
      return res.cc("分类名称被占用，请更换后重试！"); // 分类名称被占用
    if (results.length === 1 && results[0].alias === req.body.alias)
      return res.cc("分类别名被占用，请更换后重试！"); // 分类别名被占用

    // 实现新增文章分类的功能
    // 定义新增文章分类的 SQL 语句：
    const sqlstr = `insert into ev_article_cate set ?`;
    db.query(sqlstr, req.body, (err, results) => {
      if (err) return res.cc(err);
      if (results.affectedRows !== 1) return res.cc("新增文章列表失败");
      res.cc("新增文章列表成功", 0);
    });
  });
};

// ----------------------------------

// 根据 Id 删除文章分类
exports.deleteCateById = (req, res) => {
  //   实现删除文章分类的功能
  //   定义删除文章分类的 SQL 语句：    伪删除 is_delete=1 等于删除
  // const sqlStr = `update ev_article_cate set is_delete=1 where id = ?`; //这样会有bug问题 删除之后添加还是分类名 或者分类名称被占用
  const sqlStr = `delete from ev_article_cate where id = ?`; //直接删除即可
  db.query(sqlStr, req.params.id, (err, results) => {
    if (err) return res.cc(err);
    if (results.affectedRows !== 1) return res.cc("删除文章分类失败");
    res.cc("删除文章分类成功", 0);
  });
};

// ----------------------------------

// 根据 Id 获取文章分类数据
exports.getArtCateById = (req, res) => {
  // 实现获取文章分类的功能
  const sqlStr = `select * from ev_article_cate where id = ?`;
  db.query(sqlStr, req.params.id, (err, results) => {
    if (err) return res.cc(err);
    if (results.length !== 1) return res.cc("获取文章分类数据失败");
    // 把数据响应给客户端
    res.send({
      status: 0,
      message: "获取文章分类数据成功",
      data: results[0],
    });
  });
};

// ----------------------------------

//  根据 Id 更新文章分类数据
exports.updateCateById = (req, res) => {
  //   查询分类名称与别名是否被占用;
  // 定义查询 分类名称 与 分类别名 是否被占用的 SQL 语句
  // where id != ? 意思是先查询id不等于用户传过来的的 name alias 值 如果其他id 有这个name 或者alias 就提示用户 已被使用
  // 这样就会排除用户提交的name和alias 和其他用户的冲突问题
  //   and(name = ? or alias = ?) 如果没有冲突的 则等于用户传过来的name 和 alias
  const sqlStr = `select * from ev_article_cate where id != ? and(name = ? or alias = ?)`;
  db.query(
    sqlStr,
    [req.body.Id, req.body.name, req.body.alias],
    (err, results) => {
      if (err) return res.cc(err);

      // 分类名称 和 分类别名 都被占用  把新增文章的拿过来即可
      if (results.length === 2)
        return res.cc("分类名称与别名被占用，请更换后重试！"); // 分类名称 和 分类别名 都被占用
      if (
        results.length === 1 &&
        results[0].name === req.body.name &&
        results[0].alias === req.body.alias
      )
        return res.cc("分类名称与别名被占用，请更换后重试！"); // 分类名称 和 分类别名 都被占用
      if (results.length === 1 && results[0].name === req.body.name)
        return res.cc("分类名称被占用，请更换后重试！"); // 分类名称被占用
      if (results.length === 1 && results[0].alias === req.body.alias)
        return res.cc("分类别名被占用，请更换后重试！"); // 分类别名被占用

      // 更新文章分类
      // 定义更新文章分类的 SQL 语句：
      const sqlstr = `update ev_article_cate set ? where id = ?`;
      db.query(sqlstr, [req.body, req.body.Id], (err, results) => {
        if (err) return res.cc(err);
        if (results.affectedRows !== 1) return res.cc("更新文章列表失败");
        res.cc("更新文章列表成功");
      });
    }
  );
};
